using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 武器库管理类，负责处理人物武器的切换、添加和移除功能。
/// </summary>
public class Inventory : MonoBehaviour
{
    /// <summary>
    /// 存储所有可用武器的列表。每个元素是一个GameObject，代表一个武器。
    /// </summary>
    public List<GameObject> weapons = new List<GameObject>();

    /// <summary>
    /// 当前激活的武器索引。-1表示没有选择任何武器。
    /// </summary>
    public int currentWeaponID = -1;

    void Start()
    {
        // 如果武器列表不为空，则默认加载第一把武器
        if (weapons.Count > 0)
        {
            ChargeWeapon(0);
        }
    }

    void Update()
    {
        // 每一帧都尝试根据鼠标滚轮输入来切换武器
        ChargeCurrentWeaponID();
    }

    /// <summary>
    /// 根据鼠标滚轮的滚动方向切换当前武器。
    /// </summary>
    public void ChargeCurrentWeaponID()
    {
        // 获取鼠标滚轮的轴值（正值为向上滚动，负值为向下滚动）
        float scroll = Input.GetAxis("Mouse ScrollWheel");

        // 只有当鼠标滚轮确实发生了滚动时才进行处理
        if (scroll != 0)
        {
            // 根据滚动方向计算新的武器索引，并确保索引值循环
            if (scroll < 0)
            {
                // 向下滚动（选择下一把武器），使用模运算保证索引不会超出范围
                ChargeWeapon((currentWeaponID + 1) % weapons.Count);
            }
            else if (scroll > 0)
            {
                // 向上滚动（选择上一把武器），同样使用模运算，但要加上总数量以避免负数索引
                ChargeWeapon((currentWeaponID - 1 + weapons.Count) % weapons.Count);
            }
        }

        //通过数字键盘切换武器
        for(int i = 0; i < 10; i++)
        {
            if(Input.GetKeyDown(KeyCode.Alpha0 + i))
            {
                int num = 0;
                if (i == 10)
                {
                    num = 10;
                }
                else
                {
                    num = i - 1;
                }
                /*
                 只有数字个数小于武器列表个数时才进一步处理
                */
                if(num < weapons.Count)
                {
                    ChargeWeapon(num);
                }
            }
        }
    }

    /// <summary>
    /// 添加武器
    /// </summary>
    public void AddWeapon(GameObject weapon)
    {
        if(weapons.Contains(weapon))
        {
            print("集合里已存在此枪械");
            return;
        }
        else
        {
            if(weapons.Count < 3)
            {
                weapons.Add(weapon);
                ChargeWeapon(currentWeaponID + 1);//显示武器
                weapon.gameObject.SetActive(true);
            }
        }
    }

    /// <summary>
    /// 丢弃武器
    /// </summary>
    public void ThrowWeapon(GameObject weapon)
    {
        if (!weapons.Contains(weapon) || weapons.Count == 0)
        {
            print("集合里已存在此枪械");
            return;
        }
        else
        {
            weapons.Remove(weapon);
            ChargeWeapon(currentWeaponID - 1);//显示武器
            weapon.gameObject.SetActive(false);
        }
    }

    /// <summary>
    /// 切换到指定索引的武器，并隐藏其他所有武器。
    /// </summary>
    /// <param name="weaponID">要切换到的武器索引。</param>
    public void ChargeWeapon(int weaponID)
    {
        // 如果武器列表为空或提供的索引无效，则直接返回不做任何操作
        if (weapons.Count == 0 || weaponID < 0 || weaponID >= weapons.Count)
        {
            return;
        }

        // 更新当前武器索引
        currentWeaponID = weaponID;

        // 遍历武器列表，只激活对应于新索引的武器，其余全部禁用
        for (int i = 0; i < weapons.Count; i++)
        {
            weapons[i].SetActive(i == currentWeaponID);
        }
    }
}
